package com.wss.lsl.lucene.demo;

import static junit.framework.Assert.assertEquals;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;

public class CommandMain {

	public static void main(String[] args) throws IOException, ParseException {
		
		luceneDemoApi();
		
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_44);
		Directory directory = new RAMDirectory();
		
		IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_44, analyzer);
		IndexWriter indexWriter = new IndexWriter(directory, config);
		Document document = new Document();
		String text = "This is the text to be indexed. Hello";
		document.add(new Field("fieldname", text, TextField.TYPE_STORED));
		indexWriter.addDocument(document);
		indexWriter.close();
		
		DirectoryReader r = DirectoryReader.open(directory);
		IndexSearcher indexSearcher = new IndexSearcher(r);
		QueryParser parser = new QueryParser(Version.LUCENE_44, "fieldname", analyzer);
		Query query = parser.parse("Hello");
		ScoreDoc[] scoreDocs = indexSearcher.search(query, null, 1000).scoreDocs;
		assertEquals(1, scoreDocs.length);
		for(int i = 0, length = scoreDocs.length; i < length; i++){
			Document doc = indexSearcher.doc(scoreDocs[i].doc);
			System.out.println(doc.get("fieldname"));
		}
		r.close();
		directory.close();
		System.out.println("Done!");
		
	}
	
	// lucene demo api
	public static void luceneDemoApi() throws IOException, ParseException{
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_44);

	    // Store the index in memory:
	    Directory directory = new RAMDirectory();
	    // To store an index on disk, use this instead:
	    //Directory directory = FSDirectory.open("/tmp/testindex");
	    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_44, analyzer);
	    IndexWriter iwriter = new IndexWriter(directory, config);
	    Document doc = new Document();
	    String text = "This is the text to be indexed.";
	    doc.add(new Field("fieldname", text, TextField.TYPE_STORED));
	    iwriter.addDocument(doc);
	    iwriter.close();
	    
	    // Now search the index:
	    DirectoryReader ireader = DirectoryReader.open(directory);
	    IndexSearcher isearcher = new IndexSearcher(ireader);
	    // Parse a simple query that searches for "text":
	    QueryParser parser = new QueryParser(Version.LUCENE_44, "fieldname", analyzer);
	    Query query = parser.parse("text");
	    ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
	    assertEquals(1, hits.length);
	    // Iterate through the results:
	    for (int i = 0; i < hits.length; i++) {
	      Document hitDoc = isearcher.doc(hits[i].doc);
	      assertEquals("This is the text to be indexed.", hitDoc.get("fieldname"));
	    }
	    ireader.close();
	    directory.close();
	}
}
